﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using QuanLyNganHangDe.DAL;
using QuanLyNganHangDe.DAL.Models;

namespace QuanLyNganHangDe.BLL
{
    /// <summary>
    /// Lớp xử lý nghiệp vụ liên quan đến người sử dụng trong chương trình
    /// </summary>
    partial class BizNguoiSuDung
    {
        internal static NguoiSuDung GetNguoiSuDung(string tenDangNhap, int vaiTro, string matKhau)
        {
            using (var context = QuanLyNganHangDe.DAL.Models.QLNHD_KHContext.GetContext())
            {
                var nguoiSuDung = context.NguoiSuDungDbSet
                    .Where(e => e.TenDangNhap == tenDangNhap && e.VaiTro == vaiTro && e.MatKhau == matKhau)
                    .FirstOrDefault();
                return nguoiSuDung;
            }
        }

        /// <summary>
        /// Kiểm tra tính hợp lệ của người sử dụng
        /// </summary>
        /// <param name="tenDangNhap"></param>
        /// <param name="matKhau"></param>
        /// <returns></returns>
        internal static NguoiSuDung GetEntityNguoiSuDung(string tenDangNhap, int vaiTro, string matKhau)
        {
            using (var context = QLNHD_KHContext.GetContext())
            {
                //var lst = context.NguoiSuDungDbSet.ToList<NguoiSuDung>();


                NguoiSuDung nguoiSuDung = (from nguoiSuDungDb in context.NguoiSuDungDbSet
                                           where nguoiSuDungDb.TenDangNhap == tenDangNhap &&
                                           nguoiSuDungDb.VaiTro == vaiTro &&
                                           nguoiSuDungDb.MatKhau == matKhau
                                           select nguoiSuDungDb).FirstOrDefault();
                return nguoiSuDung;
            }
        }

        /// <summary>
        /// Đổi mật khẩu
        /// </summary>
        /// <param name="m_NguoiSuDung"></param>
        /// <param name="matKhauMoi"></param>
        internal static void DoiMatKhau(NguoiSuDung m_NguoiSuDung, string matKhauMoi)
        {
            using (var context = QuanLyNganHangDe.DAL.Models.QLNHD_KHContext.GetContext())
            {
                NguoiSuDung nguoiSuDung = context.NguoiSuDungDbSet.Where(
                    nsd => nsd.TenDangNhap == m_NguoiSuDung.TenDangNhap &&
                        nsd.VaiTro == m_NguoiSuDung.VaiTro &&
                        nsd.MatKhau == m_NguoiSuDung.MatKhau).FirstOrDefault();
                if (nguoiSuDung == null)
                    throw new Exception("Thông tin người sử dụng không đồng nhất!");
                else
                {
                    try
                    {
                        nguoiSuDung.MatKhau = matKhauMoi;
                        context.SaveChanges();
                    }
                    catch
                    {
                        throw new Exception("Không thể thay đổi mật khẩu được!");
                    }
                }
            }
        }

        /// <summary>
        /// Lấy người sử dụng thông qua tên đăng nhập
        /// </summary>
        /// <param name="tenDangNhap"></param>
        /// <returns></returns>
        internal static NguoiSuDung GetNguoiSuDung(string tenDangNhap)
        {
            using (var context = QuanLyNganHangDe.DAL.Models.QLNHD_KHContext.GetContext())
            {
                return context.NguoiSuDungDbSet.SingleOrDefault(e => e.TenDangNhap == tenDangNhap);
            }
        }

        /// <summary>
        /// Thêm mới người sử dụng
        /// </summary>
        /// <param name="user"></param>
        /// <returns></returns>
        internal static bool AddNew(NguoiSuDung user)
        {
            try
            {
                using (var context = QuanLyNganHangDe.DAL.Models.QLNHD_KHContext.GetContext())
                {
                    context.NguoiSuDungDbSet.Add(user);
                    context.SaveChanges();
                    return true;
                }
            }
            catch (Exception)
            {
                return false;
            }

        }

        /// <summary>
        /// Lấy danh sách người sử dụng
        /// Chỉ lấy những người có vai trò là 0 --> 2
        /// </summary>
        /// <returns></returns>
        internal static List<NguoiSuDung> GetListNguoiSuDung()
        {
            using (var context = QuanLyNganHangDe.DAL.Models.QLNHD_KHContext.GetContext())
            {
                var ds = from e in context.NguoiSuDungDbSet
                         where e.VaiTro == (int)NguoiSuDung.VAITRO.TacNghiep || e.VaiTro == (int)NguoiSuDung.VAITRO.DieuHanhNghiepVu || e.VaiTro == (int)NguoiSuDung.VAITRO.QuanTriHeThong
                         select e;
                return ds.ToList();
            }
        }

        /// <summary>
        /// Xóa người sử dụng
        /// </summary>
        /// <param name="SelectedNguoiSuDung"></param>
        internal static bool Delete_NguoiSuDung(NguoiSuDung SelectedNguoiSuDung)
        {
            using (var context = QuanLyNganHangDe.DAL.Models.QLNHD_KHContext.GetContext())
            {
                try
                {
                    var nsd = (from e in context.NguoiSuDungDbSet
                               where e.TenDangNhap == SelectedNguoiSuDung.TenDangNhap
                               select e).SingleOrDefault();
                    if (nsd != null)
                        context.NguoiSuDungDbSet.Remove(nsd);
                    context.SaveChanges();
                    return true;
                }
                catch
                {
                    return false;
                }
            }
        }

        /// <summary>
        /// Cập nhật thông tin người sử dụng
        /// </summary>
        /// <param name="nguoiSuDung"></param>
        /// <returns></returns>
        internal static bool Update_NguoiSuDung(NguoiSuDung nguoiSuDung)
        {
            using (var context = QuanLyNganHangDe.DAL.Models.QLNHD_KHContext.GetContext())
            {
                NguoiSuDung nsdung = context.NguoiSuDungDbSet.Where(
                    nsd => nsd.TenDangNhap == nguoiSuDung.TenDangNhap).FirstOrDefault();
                if (nguoiSuDung == null)
                    return false;
                else
                {
                    try
                    {
                        nsdung.HoTen = nguoiSuDung.HoTen;
                        nsdung.VaiTro = nguoiSuDung.VaiTro;
                        context.SaveChanges();
                        return true;
                    }
                    catch
                    {
                        return false;
                    }
                }
            }
        }

    }
}
